#include "IAbm.h"

using namespace ABM;

IAbm::IAbm(string nombre) {
	this->nombre = nombre;
	this->log = Log::getInstancia();
}

int IAbm::menu() {
	bool fin = false;
	while (!fin) {
		system("clear");
		int opcion = 0;
		cout << this->getNombre() << endl;
		cout << "Elegir la opcion: " << endl;
		cout << "     1 - Alta" << endl;
		cout << "     2 - Baja" << endl;
		cout << "     3 - Modificacion" << endl;
		cout << "     4 - Listar" << endl;
		cout << "     5 - Volver al Menu anterior" << endl;
		cout << "Opcion: ";
		cin >> opcion;
		cin.ignore();
		if ((opcion >= 1) && (opcion <= 5)) {
			if (opcion != 5)
				this->ABM(opcion);
			else
				fin = true;
		} else {
			cout << "Opcion Incorrecta. Vuelva a intentarlo" << endl;
			cin.ignore();
			getchar();
		}
	}
	return 0;
}

void IAbm::ABM(int opcion) {
	system("clear");
	switch (opcion) {
	case (1):
		if (this->alta()) {
			cout << "Se ha ingresado el " << this->getNombre()
					<< " correctamente." << endl;
			this->log->escribir(
					"Se ha ingresado el " + this->getNombre()
							+ " correctamente.");
		} else {
			cout << "Error al dar de Alta el " << this->getNombre() << endl;
			this->log->escribir("Error al dar de Alta el " + this->getNombre());
		}
		break;
	case (2):
		if (this->baja()) {
			cout << "Se ha borrado el " << this->getNombre()
					<< " correctamente." << endl;
			this->log->escribir(
					"Se ha borrado el " + this->getNombre() + " correctamente.");
		} else {
			cout << "Error al dar de Baja el " << this->getNombre() << endl;
			this->log->escribir("Error al dar de Baja el " + this->getNombre());
		}
		break;
	case (3):
		if (this->modificacion()) {
			cout << endl << "Se ha modificado el " << this->getNombre()
					<< " correctamente" << endl;
			this->log->escribir(
					"Se ha modificado el " + this->getNombre()
							+ " correctamente");
		} else {
			cout << "Error al modificar el " << this->getNombre() << endl;
			this->log->escribir("Error al modificar el " + this->getNombre());
		}
		break;
	case (4):
		this->listar();
		cout << "El archivo se encuentra en " << Configuracion::getInstancia()->getPathReportes() << ", con el nombre Listado<Entidad>.txt" <<endl;
		cout << "Presione una tecla para continuar..." << endl;
		break;
	case(5):
		cout << "No se ha realizado ningun cambio..." << endl;
		break;
	}

	getchar();
}

string IAbm::getNombre() {
	return this->nombre;
}

void IAbm::setNombre(string nombre) {
	this->nombre = nombre;
}

IAbm::~IAbm() {
}
